op {
  graph_op_name: "ResourceApplyAddSign"
  in_arg {
    name: "var"
    description: <<END
Should be from a Variable().
END
  }
  in_arg {
    name: "m"
    description: <<END
Should be from a Variable().
END
  }
  in_arg {
    name: "lr"
    description: <<END
Scaling factor. Must be a scalar.
END
  }
  in_arg {
    name: "alpha"
    description: <<END
Must be a scalar.
END
  }
  in_arg {
    name: "sign_decay"
    description: <<END
Must be a scalar.
END
  }
  in_arg {
    name: "beta"
    description: <<END
Must be a scalar.
END
  }
  in_arg {
    name: "grad"
    description: <<END
The gradient.
END
  }
  attr {
    name: "use_locking"
    description: <<END
If `True`, updating of the var and m tensors is
protected by a lock; otherwise the behavior is undefined, but may exhibit less
contention.
END
  }
  summary: "Update \'*var\' according to the AddSign update."
  description: <<END
m_t <- beta1 * m_{t-1} + (1 - beta1) * g
update <- (alpha + sign_decay * sign(g) *sign(m)) * g
variable <- variable - lr_t * update
END
}
